//poj 1236
#define maxn  110

int n,m;

int E[maxn*maxn],first[110],next[maxn*maxn],M;
void insert(int y,int x)
{
	next[M]=first[y];
	E[M]=x;
	first[y]=M;
	M++;
}

/********************强连通分量tarjan****************************************************/
int Dfn[maxn],Low[maxn],sta[maxn+10];
int Belong[maxn],Bcnt,Dindex,Top;
bool instack[maxn];//缩点后1到Bcnt是新的点
void tarjan(int u)
{
	int e,v;
	Dfn[u]=Low[u]=++Dindex;
	instack[u]=true;
	sta[++Top]=u;
	
	for(e=first[u]; e!=-1; e=next[e])
	{
		v=E[e];
		if(!Dfn[v])
		{
			tarjan(v);
			if(Low[v]< Low[u])
				Low[u]=Low[v];
		}	
		else if(instack[v] && Dfn[v] < Low[u])
			Low[u]=Dfn[v];
	}
	if(Dfn[u]==Low[u])
	{
		Bcnt++;
		do{
			v=sta[Top--];
			instack[v]=false;
			Belong[v]=Bcnt;
		}while(v!=u);
	}
}
void gettarjan()
{
	int i;
	Top=Bcnt=Dindex=0;
	
	memset(Dfn,0,sizeof(Dfn));
	for(i=1; i<=n; i++) //点的编号从1开始到n
		if(!Dfn[i])
			tarjan(i);
}

/********************强连通分量tarjan****************************************************/
int in[maxn],out[maxn];
int main()
{
#ifndef ONLINE_JUDGE
	freopen("in","r",stdin);
#endif
    int i,j,k,l;
	while(scanf("%d", &n)!=EOF)
	{
		M=0;
		memset(first,-1,sizeof(first));
		for(i=1; i<=n; i++)
		{
			while(scanf("%d", &k),k)
			{
				insert(i,k);
			}
		}
		
		gettarjan();
		int a=0,e,b=0;
		memset(in,0,sizeof(in));
		memset(out,0,sizeof(out));
		for(i=1; i<=n; i++)
		{
			int u=Belong[i];
			for(e=first[i]; e!=-1; e=next[e])
			{
				int v=Belong[E[e]];
				if(u!=v)
				{
					in[u]++;
					out[v]++;
				}
			}
		}
		 
		for(i=1; i<=Bcnt; i++)
		{
			if(!in[i]) a++;
			if(!out[i]) b++;
		}
		printf("%d\n",b);
		if(Bcnt==1)
			b=a=0;
		printf("%d\n",max(a,b));
	}
}

